# -*- coding: utf-8 -*-



"""
目标网站: https://101.qq.com/#/hero
需求翻页获取
获取一部分英雄的图片
采用多线程完成，每一个英雄的图片进行分类保存


https://game.gtimg.cn/images/lol/act/img/js/heroList/hero_list.js?ts=2884684
获取heroid  name

https://game.gtimg.cn/images/lol/act/img/js/hero/{heroId}.js?ts=2884684 黑暗之女
https://game.gtimg.cn/images/lol/act/img/js/hero/2.js?ts=2884685 狂战士
获取图片的链接对应的单个图片名称(单个图片有重复的，文件覆盖)

1. 向所有英雄所在的url发请求，得到对应的英雄id以及英雄名称
2. 根据英雄id向具体英雄url发请求，得到对应的图片链接
"""

# 普通实现
import requests
from urllib import request
import os

# 向所有英雄的url发请求 得到heroid name
url = 'https://game.gtimg.cn/images/lol/act/img/js/heroList/hero_list.js?ts=2884684'
# 准备请求头
head = {'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36'}

# 打印响应数据
res = requests.get(url, headers=head)
# 获取的json格式数据转换成字典，通过字典key取值
data = res.json()['hero']  # data是一个列表

# 数据类型是列表  采取循环遍历
for hero in data:
    print(hero)
    heroId = hero['heroId']
    hero_name = hero['name']
    path = f'英雄图片/{hero_name}'
    if not os.path.exists(path):
        os.mkdir(path)
    # print(hero)
    # print(hero_name, heroId)
    # 组成英雄链接 图片链接都保存在单个英雄数据包当中 所以利用heroid进行一个循环处理
    hero_url = f'https://game.gtimg.cn/images/lol/act/img/js/hero/{heroId}.js?ts=2884684'
    # 发请求，获取响应
    res2 = requests.get(hero_url, headers=head)
    hero_data = res2.json()['skins']
    for detail_hero in hero_data:
        try:
            # 获取图片链接
            mainImg = detail_hero['mainImg']  # 图片链接
            # 获取英雄名称
            picture_name = detail_hero['name']  # 图片名字
            if mainImg: # 有数据
                # 数据保存  urlretrieve(链接， 保存的路径)
                request.urlretrieve(mainImg, f'{path}/{picture_name}.jpg')
                print(f'{picture_name}下载成功')
        except Exception as e:
            print(mainImg, e)


